# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause

#####################################################################
## Nfc Module:
#####################################################################

qt_internal_add_module(Nfc
    SOURCES
        qndeffilter.cpp qndeffilter.h
        qndefmessage.cpp qndefmessage.h
        qndefnfcsmartposterrecord.cpp qndefnfcsmartposterrecord.h qndefnfcsmartposterrecord_p.h
        qndefnfctextrecord.cpp qndefnfctextrecord.h
        qndefnfcurirecord.cpp qndefnfcurirecord.h
        qndefrecord.cpp qndefrecord.h qndefrecord_p.h
        qnearfieldmanager.cpp qnearfieldmanager.h qnearfieldmanager_p.h
        qnearfieldtarget.cpp qnearfieldtarget.h qnearfieldtarget_p.cpp qnearfieldtarget_p.h
        qtnfcglobal.h qtnfcglobal_p.h
    DEFINES
        QT_NO_CONTEXTLESS_CONNECT
    PUBLIC_LIBRARIES
        Qt::Core
)

## Scopes:
#####################################################################

if(ANDROID AND (ANDROID AND NOT ANDROID_EMBEDDED))
    set_property(TARGET Nfc APPEND PROPERTY QT_ANDROID_BUNDLED_JAR_DEPENDENCIES
        jar/Qt${QtConnectivity_VERSION_MAJOR}AndroidNfc.jar
    )
    qt_internal_add_android_permission(Nfc NAME android.permission.NFC)
    set(NFC_BACKEND_AVAILABLE ON)
endif()

qt_internal_extend_target(Nfc CONDITION ANDROID AND NOT ANDROID_EMBEDDED
    SOURCES
        android/androidjninfc.cpp android/androidjninfc_p.h
        android/androidmainnewintentlistener.cpp android/androidmainnewintentlistener_p.h
        qnearfieldmanager_android.cpp qnearfieldmanager_android_p.h
        qnearfieldtarget_android.cpp qnearfieldtarget_android_p.h
    DEFINES
        ANDROID_NFC
        QT_ANDROID_NFC
    LIBRARIES
        Qt::CorePrivate
        Qt::Gui
)

if(IOS)
    # special case begin
    set(NFC_BACKEND_AVAILABLE ON)
    qt_disable_apple_app_extension_api_only(Nfc)
    qt_internal_find_apple_system_framework(FWCoreNFC CoreNFC)
    # special case end
endif()

qt_internal_extend_target(Nfc CONDITION IOS
    SOURCES
        ios/qiostagreaderdelegate.mm ios/qiostagreaderdelegate_p.h
        ios/qiosnfcndefsessiondelegate.mm ios/qiosnfcndefsessiondelegate_p.h
        ios/qiosndefnotifier.cpp ios/qiosndefnotifier_p.h
        qnearfieldmanager_ios.mm qnearfieldmanager_ios_p.h
        qnearfieldtarget_ios.mm qnearfieldtarget_ios_p.h
    DEFINES
        IOS_NFC
    LIBRARIES
        ${FWCoreNFC}
        Qt::CorePrivate
)

if(QT_FEATURE_pcsclite)
    set(NFC_BACKEND_AVAILABLE ON)
endif()

qt_internal_extend_target(Nfc CONDITION QT_FEATURE_pcsclite
    SOURCES
        qnearfieldmanager_pcsc.cpp qnearfieldmanager_pcsc_p.h
        qnearfieldtarget_pcsc.cpp qnearfieldtarget_pcsc_p.h
        qapduutils.cpp qapduutils_p.h
        pcsc/qpcsc.cpp pcsc/qpcsc_p.h
        pcsc/qpcscmanager.cpp pcsc/qpcscmanager_p.h
        pcsc/qpcscslot.cpp pcsc/qpcscslot_p.h
        pcsc/qpcsccard.cpp pcsc/qpcsccard_p.h
        ndef/qndefaccessfsm_p.h
        ndef/qnfctagtype4ndeffsm.cpp ndef/qnfctagtype4ndeffsm_p.h
    DEFINES
        PCSC_NFC
    LIBRARIES
        PkgConfig::PCSCLITE
)

if(QT_FEATURE_neard)
    set(NFC_BACKEND_AVAILABLE ON)
endif()

qt_internal_extend_target(Nfc CONDITION QT_FEATURE_neard
    SOURCES
        qnearfieldmanager_neard.cpp qnearfieldmanager_neard_p.h
        qnearfieldtarget_neard_p.cpp qnearfieldtarget_neard_p.h
        neard/neard_helper.cpp neard/neard_helper_p.h
        neard/neard_dbus_types_p.h
    DBUS_INTERFACE_SOURCES
        neard/org.freedesktop.dbus.objectmanager.xml
        neard/org.freedesktop.dbus.properties.xml
        neard/org.neard.Adapter.xml
        neard/org.neard.Tag.xml
    DBUS_INTERFACE_FLAGS
        -i neard/neard_dbus_types_p.h
        --namespace QtNfcPrivate
    DEFINES
        NEARD_NFC
    LIBRARIES
        Qt::DBus
)

qt_internal_extend_target(Nfc CONDITION NOT NFC_BACKEND_AVAILABLE
    SOURCES
        qnearfieldmanager_generic.cpp qnearfieldmanager_generic_p.h
)
qt_internal_add_docs(Nfc
    doc/qtnfc.qdocconf
)
